1
ข้อผิดพลาดของอัปเปอร์เอพีไอ: การเปลี่ยนจากวิศวกรรมคำสั่งไปสู่การเชี่ยวชาญระดับเต็มระบบ
AI008บทเรียนที่ 1
00:00

แก่นแท้ของการเรียนรู้ปัญญาประดิษฐ์สมัยใหม่มักประสบกับ ความพึ่งพาในตัวหุ้มระดับสูงผู้ปฏิบัติงานหลายคนเชื่อว่าการเป็นผู้เชี่ยวชาญนั้นเกี่ยวข้องกับเพียงแค่การเชื่อมต่อการเรียกใช้ API หรือปรับแต่งไวยากรณ์คำสั่งให้แม่นยำ อย่างไรก็ตาม วิศวกรรมโมเดลภาษาขนาดใหญ่ที่แท้จริงจำเป็นต้องก้าวข้ามความเข้าใจแบบทั่วไปเหล่านี้ เพื่อทำความเข้าใจกลไกของเทนเซอร์ในโครงสร้างย่อยและพื้นฐานทางคณิตศาสตร์ ซึ่งช่วยให้สามารถปรับประสิทธิภาพฮาร์ดแวร์และแก้ไขปัญหาที่ซับซ้อนได้

1. คำถามสำคัญของความเชี่ยวชาญ

วิศวกรรมโมเดลภาษาขนาดใหญ่ (LLM) คือการจัดการคำสั่งหรือไม่? หรือมันต้องการความเข้าใจแบบครบวงจรในพื้นฐานการคำนวณและการพัฒนาสถาปัตยกรรมที่ทำให้มันเกิดขึ้น? การพึ่งพาเฉพาะอัปเปอร์เอพีไอจะสร้างข้อจำกัดเมื่อระบบล้มเหลว โดยเฉพาะในช่วง:

  • การระเบิดของเกรเดียนต์ในรอบการฝึกอบรมที่กำหนดเอง
  • การเปลี่ยนจากสถาปัตยกรรมคลาวด์แบบรวมศูนย์ไปยังบริการไมโครเซอร์วิสท้องถิ่นที่มีประสิทธิภาพ
  • การปรับประสิทธิภาพระดับฮาร์ดแวร์สำหรับการคาดการณ์ที่มีความหน่วงต่ำ

2. พื้นฐานทางคณิตศาสตร์

เพื่อข้ามข้อผิดพลาดของอัปเปอร์เอพีไอ วิศวกรต้องยึดมั่นในหลักสี่ประการดังต่อไปนี้:

  • พีชคณิตเชิงเส้น:การคูณเมทริกซ์และการแยกตัวประกอบค่าเฉพาะ (eigenvalue decomposition) สำหรับเวกเตอร์ในมิติสูง
  • แคลคูลัสหลายตัวแปร:เข้าใจกระบวนการแบ่งกระจายย้อนกลับ (backpropagation) และการไหลของเกรเดียนต์
  • ความน่าจะเป็นและสถิติ:การจัดการผลลัพธ์ที่มีความสุ่ม (stochastic outputs) และการปรับสมดุลหลังการฝึกอบรม
  • ทฤษฎีบทการประมาณแบบทั่วไป:ยอมรับว่าแม้ชั้นซ่อนเดียวจะสามารถประมาณฟังก์ชันใด ๆ ได้ แต่ความท้าทายในโลกแห่งความจริงอยู่ที่การสร้างความเป็นทั่วไป (generalization) และการหลีกเลี่ยงปัญหาเกรเดียนต์หายไป (vanishing gradient problem)
การนำเสนองานด้วยภาษาไพธอน (แนวคิด)
1
นำเข้า นัมพาย เป็น นพี
2
3
คลาส นิวโรน:
4
ฟังก์ชัน __เริ่มต้น(self, จำนวนอินพุต):
5
# ตั้งค่าค่าความสำคัญ (weight) และค่าเบส (bias) เริ่มต้น
6
self.w = นัมพาย.สุ่ม.เรนดอม_นัมเบอร์(จำนวนอินพุต)
7
self.b = นัมพาย.สุ่ม.เรนดอม_นัมเบอร์()
8
self.grad_w = นัมพาย.ศูนย์_เหมือน(self.w)
9
10
ฟังก์ชัน ฟอร์เวิร์ด(self, x):
11
# การคูณเวกเตอร์แบบเวกเตอร์ (มีประสิทธิภาพต่อฮาร์ดแวร์)
12
self.out = นัมพาย.ดอท(self.w, x) + self.b
13
# ฟังก์ชันกระตุ้น (ReLU)
14
คืนค่ามากสุด(0, self.out)
15
16
ฟังก์ชัน แบ็กเวิร์ด(self, grad_out, อัตราเร็ว)=0.01):
17
# ขั้นตอนการลดเกรเดียนต์
18
# หากไม่เข้าใจสิ่งนี้ การตรวจสอบข้อผิดพลาด NaN เป็นไปไม่ได้
19
self.w -= อัตราเร็ว * self.grad_w